package com.lemon.support.utils;


import java.util.function.Function;

/**
 * @program: lemonnote
 * @description: 枚举工具类
 * @author: Mr.Lemon
 * @create: 2018-09-29 20:56
 */
public class EnumUtil {
    private EnumUtil() {
    }

    /**
     * @description
     * @method parse
     * @param tClass
     *            枚举类
     * @param s
     *            需要根据 该参数进行 转换: 如enum 里有 msg和code，则可以根据 code 或者 msg
     *            进行转换为一个enum，这个s就是code或msg. 注：s尽量转换成String或int类型
     * @param f
     *            s对应的getter方法
     * @return T 枚举
     * @date: 2018/9/29 21:22
     * @author: Mr.Lemon
     */
    public static <T extends Enum, R, S> T parse(Class<T> tClass, S s,
            Function<T, R> f) {
        T[] ts = tClass.getEnumConstants();
        for(T t : ts) {
            R r = f.apply(t);
            if(s instanceof String && r.equals(s) || r == s) {
                return t;
            }
        }
        return null;
    }
}
